#pragma once

#include "rtdev/tio_common.h"

#ifdef __cplusplus
extern "C" {
#endif

//TIO related interfaces
TIOStatus tio_status();

TIOSetting get_tio_settings();

int reset_tio();

int tio_query_version();

int tio_set_lamp(TIOLampColor color);

int tio_set_vout_enable(int enable);

// 0 for 24V 1 for 12V
int tio_set_vout_voltage(int voutVol);

int tio_set_dout(int index, int dout);

// 0:0x00 DI2输入类型为NPN,DI1输入类型为NPN
// 1:0x01 DI2输入类型为NPN,DI1输入类型为PNP
// 2:0x10 DI2输入类型为PNP,DI1输入类型为NPN
// 3:0x11 DI2输入类型为PNP,DI1输入类型为PNP
int tio_setup_di_pin(uint32_t cfg);

// 低8位数据有效，低8位数据中，高4位为DO2配置，低四位为DO1配置，具体含义如下：
// 0x0 DO输出为类型为NPN输出
// 0x1 DO输出类型为PNP输出
// 0x2 DO输出类型为推挽输出
// 0xF RS485H接口使能，DO禁止
int tio_setup_do_pin(uint32_t cfg);

//  0:模拟输入功能使能，RS485L禁止
// 1:RS485L接口使能，模拟输入功能禁止
int tio_setup_ai_pin(uint32_t cfg);

/**
 * @brief 配置RS485接口数据传输模式
 * 
 * @param chn 0:RS485 channel 1, 1:RS485 channel 2
 * @param mode 0:Modbus RTU模式, 1:数据转发模式
 * @return int 0 for success, -1 for failure
 */
int set_tio_rs485_chn_mode(int chn, int mode);

/**
 * @brief 配置通讯参数
 * 
 * @param chn RS485接口ID, 0:RS485 channel 1, 1:RS485 channel 2
 * @param baudrate 波特率, 无符号整数，最大2250000
 * @param databit 数据位, 0:8位数据位, 1:9位数据位
 * @param stopbit 停止位, 0:1个停止位, 1:0.5个停止位, 2:2个停止位, 3:1.5个停止位
 * @param parity 校验位, 0:无校验, 1:偶校验, 2:奇校验
 * @return int 0 for success, -1 for failure
 */
int set_tio_rs485_chn_comm(int chn, int baudrate, int databit, int stopbit, char parity);

/**
 * @brief 设置RS485通道功能w
 * 
 * @param cfg 通道功能, 0:不使用力矩传感器; 
 * 					   1:力矩传感器接RS485_1接口，此时报文ID使用0x730和0x731
 *                     2:力矩传感器接RS485_2接口，此时报文ID使用0x720和0x721
 * @return int 0 for success, -1 for failure
 */
int tio_set_rs485_chn_func(int cfg);
int tio_set_vout_voltage(int cfg);

#ifdef __cplusplus
}
#endif
